home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 June / MacFormat 25.iso / Shareware City / Developers / Tools Plus 2.5.3 Evaluation Kit / Tools Plus 2.5.3 / Tools Plus 2.5.3 for Pascal / ToolsPlus.p < prev   
Encoding:
Text File  |  1994-12-12  |  59.9 KB  |  1,156 lines  |  [TEXT/PJMM]

  1. {    Tools Plus (Version 2.5.3) Pascal interface                                                                        }
  2. {    Copyright (C) 1989-95 Water’s Edge Software                                                                    }
  3.  
  4. {    This unit is the interface between Pascal applications and Tools Plus.  It must be used by any program or unit    }
  5. {    that makes reference to any part of Tools Plus.                                                                    }
  6. {                                                                                                                    }
  7. {    All TYPEs, VARiables, and CONSTants required by Tools Plus are included.                                        }
  8. {                                                                                                                    }
  9. {    You must include the entire set of Tools Plus libraries and related files in your project:                            }
  10. {        ToolsPlus.Lib1                                                                                                }
  11. {        ToolsPlus.Lib2                                                                                                }
  12. {        ToolsPlus.Lib3                                                                                                }
  13. {        ToolsPlus.p                                                                                                }
  14.  
  15.  
  16.  
  17. unit ToolsPlus;
  18.  
  19. interface
  20.     const
  21.         UseColor = true;                                                {INITIALIZATION:    Use color if available        }
  22.         IgnoreColor = false;                                                {                    Don't use color                }
  23.         doNothing = 0;                                                    {POLLING:    no event                            }
  24.         doChgWindow = 1;                                                {            user clicked in an inactive window    }
  25.         doRefresh = 2;                                                    {            a window has to be refreshed        }
  26.         doGoAway = 3;                                                    {            the close box was clicked            }
  27.         doButton = 4;                                                    {            button was clicked                    }
  28.         doMenu = 5;                                                    {            menu was selected                    }
  29.         doKeyDown = 6;                                                {            a keyboard key was pressed        }
  30.         doAutoKey = 7;                                                    {            a keyboard key is auto-repeating    }
  31.         doKeyUp = 8;                                                    {            a keyboard key was released        }
  32.         doClickField = 9;                                                {            mouse clicked in inactive field        }
  33.         doScrollBar = 10;                                                {            mouse clicked in a scroll bar        }
  34.         doListBox = 11;                                                    {            some sort of List Box activity        }
  35.         doClick = 12;                                                    {            mouse click/drag                    }
  36.         doPopUpMenu = 13;                                            {            pop-up menu was selected            }
  37.         doPictButton = 14;                                                {            picture button activity                }
  38.         doClickControl = 101;                                            {            mouse clicked in a custom control    }
  39.         doManualEvent = 102;                                            {            manually processed events            }
  40.         doMoveWindow = 103;                                            {            a window was moved by user        }
  41.         doGrowWindow = 104;                                            {            a window was re-sized by the user    }
  42.         doClickDesk = 105;                                                {            mouse clicked in the desk top        }
  43.         doZoomWindow = 106;                                            {            zoom box was clicked by user        }
  44.         doSuspend = 107;                                                {            appl. suspended (in background)    }
  45.         doResume = 108;                                                {            appl. resumed (now active appl.)    }
  46.         doChgInField = 109;                                            {            editing field contents was changed    }
  47.         doPreRefresh = 110;                                            {            refresh window before T+ objects    }
  48.         inClick1 = 1;                                                    {CLICK:    mouse single-click completed        }
  49.         inClick2 = 2;                                                    {            mouse double-click completed        }
  50.         inClick3 = 3;                                                    {            mouse triple-click completed        }
  51.         inClick1Drag = -1;                                                {            mouse single-click, still dragging    }
  52.         inClick2Drag = -2;                                                {            mouse double-click, still dragging    }
  53.         inClick3Drag = -3;                                                {            mouse triple-click, still dragging        }
  54.         EnterKey = chr($03);                                            {KEYS:        Key characters (ASCII) for common    }
  55.         BackSpaceKey = chr($08);                                        {                non apha-numeric keys.        }
  56.         TabKey = chr($09);                                                {                In some cases, several keys    }
  57.         ReturnKey = chr($0D);                                            {                produce the same ASCII        }
  58.         EscClearKey = chr($1B);                                        {  ($1B)            character.  They can be            }
  59.         LeftArrowKey = chr($1C);                                        {                differentiated by using the key    }
  60.         RightArrowKey = chr($1D);                                        {                code, as indicated below.        }
  61.         UpArrowKey = chr($1E);                                        {                Some keys are available only    }
  62.         DownArrowKey = chr($1F);                                        {                on an extended keyboard.        }
  63.         HelpKey = chr($05);                                            {                                                }
  64.         HomeKey = chr($01);                                            {                                                }
  65.         DeleteFwdKey = chr($7F);                                        {                                                }
  66.         EndKey = chr($04);                                                {                                                }
  67.         PageUpKey = chr($0B);                                            {                                                }
  68.         PageDownKey = chr($0C);                                        {                                                }
  69.         FKey = chr($10);                                                {  ($10)        Function keys F1 to F15            }
  70.         EscKeyCode = $35;                                            {  ($1B)        KEY CODES used to differentiate    }
  71.         ClearKeyCode = $47;                                            {  ($1B)            between keys which produce    }
  72.         F1KeyCode = $7A;                                                {                the same key characters.        }
  73.         F2KeyCode = $78;                                                {                                                }
  74.         F3KeyCode = $63;                                                {                                                }
  75.         F4KeyCode = $76;                                                {                                                }
  76.         F5KeyCode = $60;                                                {                                                }
  77.         F6KeyCode = $61;                                                {                                                }
  78.         F7KeyCode = $62;                                                {                                                }
  79.         F8KeyCode = $64;                                                {                                                }
  80.         F9KeyCode = $65;                                                {                                                }
  81.         F10KeyCode = $6D;                                            {                                                }
  82.         F11KeyCode = $67;                                                {                                                }
  83.         F12KeyCode = $6F;                                                {                                                }
  84.         F13KeyCode = $69;                                                {                                                }
  85.         F14KeyCode = $6B;                                            {                                                }
  86.         F15KeyCode = $71;                                                {                                                }
  87.         mDividingLine = '-';                                                {MENUS:        Dividing line                    }
  88.         AppleChar = chr($14);                                            {MENU CHARS:    Apple character                }
  89.         CheckChar = chr($12);                                            {                Check Mark character            }
  90.         DiamondChar = chr($13);                                        {                Diamond character                }
  91.         DotChar = chr($A5);                                            {                Dot (or bullet) character            }
  92.         NoChar = chr($00);                                                {                no character                    }
  93.                                                                     {PICTURE BUTTONS:                            }
  94.         picbutInstantEvent = $80000000;                                {        Report event on mouse-down            }
  95.         picbutTrackWithHilite = $40000000;                                {        Track using hiliting, like a radio button    }
  96.         picbutLockSelected = $20000000;                                {        Lock if selected (mouse can't deselect)    }
  97.         picbutSwitchSelected = $10000000;                            {        Switch 'selected' state if clicked        }
  98.         picbutRepeatEvents = $08000000;                                {        Repeat event when button is held down    }
  99.         picbutAutoValueChg = $04000000;                                {        Automatically change button's value    }
  100.         picbutScaleLinear = $00000000;                                {        Rate of automatic value change…        }
  101.         picbutScaleSlowAccel = $01000000;                            {            Linear, Slow Acceleration,            }
  102.         picbutScaleMedAccel = $02000000;                            {            Medium Acceleration, and            }
  103.         picbutScaleFastAccel = $03000000;                            {            Fast Acceleration.                    }
  104.         picbutLinear = 0;                                                {            Linear (use in structure)            }
  105.         picbutSlowAccel = 1;                                            {            Slow (use in structure)                }
  106.         picbutMedAccel = 2;                                            {            Medium (use in structure)            }
  107.         picbutFastAccel = 3;                                            {            Fast (use in structure)                }
  108.         picbutValueWrap = $00800000;                                    {        Button's range of values 'wrap' around    }
  109.         picbutLeftRightSplit = $00400000;                                {        Left side reduces value, right increases    }
  110.         picbutTopBottomSplit = $00200000;                            {        Top increases value, bottom reduces    }
  111.         picbutMultiStage = $00100000;                                    {        Button has multiple stages                }
  112.         picbutBigSICN3D = $00080000;                                    {        Create a larger SICN 3D button            }
  113.         picbutUsePICTS = $00040000;                                    {        Use PICTs instead of icons                }
  114.         picbutGray4use8 = $00020000;                                    {        Use 8-bit color pict on 4-bit gray monitor    }
  115.                                                                     {       Selection Effects…                        }
  116.         picbutSelectDarken = $00010000;                                {        Darken image                            }
  117.         picbutSelectDarkenSICN3D = $00008000;                        {        Darken (and push in) a 3D SICN icon    }
  118.         picbutSelectLightenSICN3D = $00004000;                        {        Lighten (and push in) a 3D SICN icon    }
  119.         picbutSelectPushedSICN3D = $00002000;                        {        Same color (and push in) a 3D SICN icon}
  120.         picbutSelectAltImage = $00000400;                            {        Use an alternate image                    }
  121.                                                                     {       Disabling Effects…                        }
  122.         picbutDimUsingBlackLite = $00000100;                            {        Overlay Black color using Lt Gray pat.    }
  123.         picbutDimUsingWhiteLite = $00000080;                            {        Overlay White color using Lt Gray pat.    }
  124.         picbutDimUsingWhite = $00000040;                                {        Overlay White color using Gray pat.        }
  125.         picbutDimLeaveBorder = $00000008;                            {        Leave border when applying effect        }
  126.         picbutDimAltImage = $00000004;                                {        Use an alternate image                    }
  127.         picbutDimNoChange = $00000002;                                {        Button looks the same when disabled    }
  128.                                                                     {POP-UP MENUS:                                }
  129.         popupNeverDimOutline = $0100;                                {        Never dim the control's outline?            }
  130.         popupNeverDimSelection = $0080;                                {        Never dim the selected item's text?        }
  131.         popupNeverDimTitle = $0040;                                    {        Never dim the title?                        }
  132.         popupNoArrow = $0020;                                        {        Is the "down arrow" hidden?                }
  133.         popupMultiSelect = $0010;                                        {        Allow multiple items to be selected?        }
  134.         popupUseWFont = $0008;                                        {        Use the window's font for the menu?    }
  135.         popupIconTitle = $0004;                                        {        Draw icon in the control's title?            }
  136.         popupFixedTitle = $0002;                                        {        Is a fixed title displayed in the control?    }
  137.         popupDefaultType = $0000;                                        {        Default menu (sys font, 1 item, no icon)    }
  138.         arrowCursor = 0;                                                {CURSORS:    "arrow" cursor                    }
  139.         GoAway = true;                                                    {WINDOWS:    no "close box"                    }
  140.         NoGoAway = false;                                                {                window has a "close box"        }
  141.         Modal = true;                                                    {                window is modal                }
  142.         NotModal = false;                                                {                window is modeless                }
  143.         ZoomBox = 8;                                                    {                zoom box (add to procID)        }
  144.         wCenter = $00010000;                                            {                auto-centering (add to procID)    }
  145.         wTile = $00020000;                                                {                auto-tiling (add to procID)        }
  146.         wPalette = $80000000;                                            {                palette behavior (add to procID)    }
  147.         ordPaletteProc = 32000;                                        {                window that looks like Palette    }
  148.         paletteProc = 32000 + wPalette;                                {                T+’s Floating Palette window    }
  149.         altPaletteProc = 32002 + wPalette;                                {                T+’s palette with drag bar on left    }
  150.         wNoKind = 0;                                                    {  Kinds of Windows:    Not open                }
  151.         wToolBarKind = 1;                                                {                        Tool Bar                }
  152.         wFloatingKind = 2;                                                {                        Floating Palette            }
  153.         wStandardKind = 3;                                                {                        Standard Window        }
  154.         wAnimateMove = $01;                                            {  Moving Windows:    Animate w/Zoom Lines    }
  155.         wOffsetForToolBar = $02;                                        {                        Offset co-ords for TB    }
  156.         wShow = true;                                                    {    Hiding Windows:    Display (unhide)        }
  157.         wHide = false;                                                    {                        Hide window            }
  158.         tbShiftWindows = $01;                                            {TOOL BAR:    Shift windows when TB opens    }
  159.         tbOffsetNewWindows = $02;                                    {                Offset new windows as they    }
  160.                                                                     {                  are opened (if TB is open).    }
  161.         DefaultButton = 4;                                                {BUTTONS:        “default” for the window            }
  162.         selected = true;                                                    {                button is selected (i.e. checked)}
  163.         notSelected = false;                                            {                button is not selected            }
  164.         scrlLeftEdge = -1;                                                {SCROLL BARS:    left edge of document        }
  165.         scrlTopEdge = -1;                                                {                    top edge of document        }
  166.         scrlRightEdge = 32767;                                            {                    right edge of document        }
  167.         scrlBottomEdge = 32767;                                        {                    bottom edge of document    }
  168.                                                                     {BUTTONS, MENUS, SCROLL BARS & ICONS:    }
  169.         enabled = true;                                                    {                object is enabled                }
  170.         disabled = false;                                                {                object is disabled                }
  171.         teBoxNoCR = 0;                                                {EDIT FIELDS:    box around field, no CR allowed    }
  172.         teBoxCR = 1;                                                    {                box around field, CR allowed    }
  173.         teNoBoxNoCR = 2;                                                {                no box, no CR allowed            }
  174.         teNoBoxCR = 3;                                                {                no box, CR allowed                }
  175.         teSelectAll = 0;                                                    {EDIT FIELD SELECTION:    all of text            }
  176.         teSelectStart = 1;                                                {                            beginning of text    }
  177.         teSelectEnd = 2;                                                {                            end of text            }
  178.         teReplace = true;                                                {PASTE INTO FIELD:    replace field contents    }
  179.         teInsert = false;                                                {                        insert text into field        }
  180.         OkAltBut = 1;                                                    {ALERTS:    OK                (Buttons refs)        }
  181.         CanAltBut = 2;                                                    {            Cancel                                }
  182.         YesAltBut = 3;                                                    {            Yes                                }
  183.         NoAltBut = 4;                                                    {            No                                    }
  184.         ContAltBut = 5;                                                    {            Continue                            }
  185.         SkipAltBut = 6;                                                    {            Skip                                }
  186.         QuitAltBut = 7;                                                    {            Quit                                }
  187.         NoButtonAlert = 0;                                                {            No buttons        (Alert Defs)            }
  188.         OkAlert = 11100;                                                {            OK (default)                        }
  189.         CanAlert = 11200;                                                {            Cancel (default)                    }
  190.         OkCanAlert = 22210;                                            {            OK (default) + Cancel                }
  191.         CanOkAlert = 21210;                                            {            OK + Cancel (default)                }
  192.         YesNoAlert = 22430;                                            {            Yes (default) + No                    }
  193.         NoYesAlert = 21430;                                            {            Yes + No (default)                     }
  194.         YesNoCanAlert = 33243;                                        {            Yes (default) + No + Cancel            }
  195.         NoYesCanAlert = 32243;                                        {            Yes + No (default) + Cancel            }
  196.         nmSysBeep = -1;                                                {NOTIFICATION:    Use System Error sound    }
  197.         nmSilentNote = 0;                                                {                    Silent notification            }
  198.         nmDefaultMsg = ' ';                                                {                    Use default message        }
  199.         nmNoMsg = '';                                                    {                    Don't display an alert        }
  200.         nmResetWhenDone = true;                                        {                    Reset to defaults after used}
  201.         nmKeepSettings = false;                                        {                    Keep settings after used    }
  202.         NoIcon = -32768;                                                {ICONS:    No icon used                        }
  203.                                                                     {        Disabled icons' default appearance…    }
  204.         DfltIconDimBlackLtPat = $01;                                    {            Overlay Black color w/ Lt Gray pat.    }
  205.         DfltIconDimWhiteLtPat = $02;                                    {            Overlay White color w/ Lt Gray pat.    }
  206.         DfltIconDimWhitePat = $04;                                        {            Overlay White color w/ Gray pat.    }
  207.         DfltIconLeaveBorder = $20;                                        {        Leave border when selected or disabled    }
  208.         DfltIconUpdateNow = $8000;                                    {        Update all windows with changes        }
  209.         on = true;                                                        {MISCELLANEOUS:                            }
  210.         off = false;                                                        {                                                }
  211.         maxNullTime = $7FFFFFFF;                                        {        Infinite time between doNothing evts    }
  212.         ZoomAcross = 0;                                                {ZOOM LINES:    transitional                        }
  213.         ZoomIn = -1;                                                    {                zoom inward (further away)        }
  214.         ZoomOut = 1;                                                    {                zoom outward (nearer)            }
  215.         none = 0;                                                        {used primarily for polling                        }
  216.  
  217.  
  218.  
  219.  
  220.     type
  221.  
  222.     { -   -   -   -   -   -   -   -   -   -   These record "types" are used for information transfer between   -   -   -   -   -   -   -   -   -   -   -    }
  223.     {                                     your application and Tools Plus libraries.                                    }
  224.  
  225.     {= Polling record's "event modifiers" info}
  226.         TPModifiersRec = packed record                                {This variable record contains an event's        }
  227.                 case integer of                                            {    "modifiers" in 2 formats…                    }
  228.                     0: (                                                        {    • Macintosh Event:                            }
  229.                             Num: integer                                            {        integer (bit operations required)            }
  230.                     );                                                            {                                                }
  231.                     1: (                                                        {    • Modifier integer parsed into components:    }
  232.                             bit15, bit14, bit13: boolean;                            {        (reserved bits)                            }
  233.                             ControlKey: boolean;                                    {        Control key was down at event (=1)        }
  234.                             OptionKey: boolean;                                    {        Option key was down at event (=1)        }
  235.                             CapsLock: boolean;                                    {        Caps Lock was down at event (=1)        }
  236.                             ShiftKey: boolean;                                    {        Shift key was down at event (=1)        }
  237.                             CmdKey: boolean;                                    {        Command key was down at event (=1)    }
  238.                             MouseUp: boolean;                                    {        Mouse button was UP at event (=1)        }
  239.                             bit6, bit5, bit4, bit3, bit2, bit1, bit0: boolean            {        (reserved bits)                            }
  240.                     );                                                            {                                                }
  241.             end;
  242.     {= Polling record's "button" info}
  243.         TPPollButtonRec = record
  244.                 Num: integer;                                                {Button number                                    }
  245.                 DoubleClick: boolean                                        {Did a double-click occur?                        }
  246.             end;
  247.     {= Polling record's "scroll bar" info}
  248.         TPPollScrollBarRec = record
  249.                 Num: integer;                                                {Scroll bar number                                }
  250.                 Part: integer                                                {Scroll bar's part                                }
  251.             end;
  252.     {= Polling record's "list box" info}
  253.         TPPollListBoxRec = record
  254.                 Num: integer;                                                {List box number                                }
  255.                 DoubleClick: boolean                                        {Did a double-click occur?                        }
  256.             end;
  257.     {= Polling record's "menu" info}
  258.         TPPollMenuRec = record
  259.                 Num: integer;                                                {Menu number                                    }
  260.                 Item: integer                                                {Menu item number                                }
  261.             end;
  262.     {= Polling record's "key-stroke" info}
  263.         TPPollKeyRec = packed record
  264.                 Code: integer;                                                {Logical key number of the typed key            }
  265.                 Chr: char;                                                    {ASCII character generated by typed key        }
  266.                 Unused: byte                                                { (reserved byte)                                }
  267.             end;
  268.     {= Polling record's "mouse location and time" info for mouse-down and mouse-up events}
  269.         TPPollMousePointRec = record
  270.                 Where: point;                                                {Event location in local co-ordinates            }
  271.                 When: longint;                                                {Event time in clock ticks from boot (1/60 sec)    }
  272.                 Modifiers: TPModifiersRec                                    {Event modifiers                                }
  273.             end;
  274.     {= Polling record's "mouse click/drag" info}
  275.         TPPollMouseRec = record
  276.                 What: integer;                                                {What type of mouse event? (click or drag)        }
  277.                 Down: array[1..3] of TPPollMousePointRec;                {Where & when did the mouse-down occur        }
  278.                 Up: array[1..3] of TPPollMousePointRec;                    {Where & when did the mouse-up occur            }
  279.                 Where: point                                                {Current mouse location in local co-ordinates    }
  280.             end;
  281.     {= POLLING record for Tools Plus}
  282.         TPPollPointer = ^TPPollRecord;                                    {Pointer to a Polling record                        }
  283.  
  284.         TPPollRecord = record                                        {Tools Plus Polling record…                        }
  285.                 What: integer;                                                {What type of event has occurred?                }
  286.                 Window: integer;                                            {Window number of the event                    }
  287.                 Button: TPPollButtonRec;                                    {Button number/double-click status                }
  288.                 ScrollBar: TPPollScrollBarRec;                                {Scroll bar number/scroll bar part                }
  289.                 Field: integer;                                                {Field number of event                            }
  290.                 ListBox: TPPollListBoxRec;                                {List box number/double-click status            }
  291.                 Menu: TPPollMenuRec;                                        {Menu number/menu item of an event            }
  292.                 Key: TPPollKeyRec;                                        {Logical key number & character of typed key    }
  293.                 Mouse: TPPollMouseRec;                                    {Click/drag info: [1..3] where & when            }
  294.                 Modifiers: TPModifiersRec;                                    {Modifier flags                                    }
  295.                 Event: EventRecord                                        {Macintosh Toolbox Event (raw)                    }
  296.             end;
  297.  
  298.  
  299.     {= WINDOW status information}
  300.         TPWindowStatus = record                                        {Window status record…                        }
  301.                 Kind: integer;                                                { • Window kind: Tool Bar, Palette, or Standard    }
  302.                 Open: boolean;                                                { • Is the window open?                            }
  303.                 Visible: boolean;                                            { • Is this window visible (not hidden)?            }
  304.                 Active: boolean;                                            { • Is this window active?                        }
  305.                 Front: boolean;                                                { • Is this the frontmost Tools Plus window?        }
  306.                 Current: boolean;                                            { • Is this the current window?                    }
  307.                 WorkWindow: boolean;                                        { • Is this the work window?                        }
  308.                 EditFieldWindow: boolean;                                    { • Does this window have the app's active field?    }
  309.                 ActiveField: integer;                                        { • Window's active field number                    }
  310.                 StrucRect: rect;                                            { • Structure rect (global).  Incl border & title bar    }
  311.                 ContRect: rect;                                                { • Content rect (global).  Working area only.        }
  312.             end;
  313.  
  314.  
  315.     {= Color Pen information}
  316.         ColorPenState = record                                        {Color equivalent for a 'PenState' record.  This    }
  317.                 PenState: PenState;                                        {    record also stores additional values for the    }
  318.                 ForegroundColor: RGBColor;                                {    window's foreground and background        }
  319.                 BackgroundColor: RGBColor                                {    colors.                                        }
  320.             end;
  321.  
  322.  
  323.     {= Picture Button Appearance & Behavior Specification (or you can use constants instead)                        }
  324.         TPPictButtonSpec = packed record                            {Picture Button's appearance and behavior        }
  325.                                                                     {    specifications in 2 formats…                }
  326.                 case integer of                                            {                                                }
  327.                     0: (                                                        {    • Parsed into components:                    }
  328.                             InstantEvent: boolean;                                {        Report event on mouse-down            }
  329.                             TrackWithHilite: boolean;                                {        Track using hiliting, like a radio button    }
  330.                             LockSelected: boolean;                                {        Lock if selected (mouse can't deselect)    }
  331.                             SwitchSelected: boolean;                                {        Switch 'selected' state if clicked        }
  332.                             RepeatEvents: boolean;                                {        Repeat event when button is held down    }
  333.                             AutoValueChg: boolean;                                {        Automatically change button's value    }
  334.                             AutoValueScaling: 0..3;                                {        Rate of change for button's value        }
  335.                             ValueWrap: boolean;                                    {        Button's range of values 'wrap' around    }
  336.                             LeftRightSplit: boolean;                                {        Left side reduces value, right increases    }
  337.                             TopBottomSplit: boolean;                                {        Top increases value, bottom reduces    }
  338.                             MultiStage: boolean;                                    {        Button has multiple stages                }
  339.                             BigSICN3D: boolean;                                    {        Create a larger SICN 3D button            }
  340.                             UsePICTS: boolean;                                    {        Use PICTs instead of icons                }
  341.                             Gray4use8: boolean;                                    {        Use 8-bit color pict on 4-bit gray monitor    }
  342.                                                                     {       Selection Effects…                        }
  343.                             SelectDarken: boolean;                                {        Darken image                            }
  344.                             SelectDarkenSICN3D: boolean;                        {        Darken (and push in) a 3D SICN icon    }
  345.                             SelectLightenSICN3D: boolean;                        {        Lighten (and push in) a 3D SICN icon    }
  346.                             SelectPushedSICN3D: boolean;                        {        Same color (and push in) a 3D SICN icon}
  347.                             bit19, bit20: boolean;                                    {           (reserved bits)                        }
  348.                             SelectAltImage: boolean;                                {        Use an alternate image                    }
  349.                             bit22: boolean;                                        {           (reserved bit)                            }
  350.                                                                     {       Disabling Effects…                        }
  351.                             DimUsingBlackLite: boolean;                            {        Overlay Black color using Lt Gray pat.    }
  352.                             DimUsingWhiteLite: boolean;                            {        Overlay White color using Lt Gray pat.    }
  353.                             DimUsingWhite: boolean;                                {        Overlay White color using Gray pat.        }
  354.                             bit26, bit27: boolean;                                    {           (reserved bits)                        }
  355.                             DimLeaveBorder: boolean;                            {        Leave border when applying effect        }
  356.                             DimAltImage: boolean;                                {        Use an alternate image                    }
  357.                             DimNoChange: boolean;                                {        Button looks the same when disabled    }
  358.                             bit31: boolean;                                        {           (reserved bit)                            }
  359.                     );                                                            {                                                }
  360.                     1: (                                                        {    • Longint equivalent:                        }
  361.                             Num: longint;                                            {        Specification longint                    }
  362.                     );                                                            {                                                }
  363.             end;
  364.  
  365.  
  366.     {= Pop-Up Menu Appearance & Behavior Specification (or you can use constants instead)                        }
  367.         TPPopUpMenuSpec = packed record                        {Pop-Up Menu's appearance and behavior        }
  368.                                                                     {    specifications in 2 formats…                }
  369.                 case integer of                                            {                                                }
  370.                     0: (                                                        {    • Parsed into components:                    }
  371.                             bit15, bit14, bit13, bit12: boolean;                        {           (reserved bits)                        }
  372.                             bit11, bit10, bit9: boolean;                            {           (reserved bits)                        }
  373.                             NeverDimOutline: boolean;                            {        Never dim the control's outline?            }
  374.                             NeverDimSelectedItem: boolean;                        {        Never dim the selected item's text?        }
  375.                             NeverDimTitle: boolean;                                {        Never dim the title?                        }
  376.                             NoArrow: boolean;                                    {        Is the "down arrow" hidden?                }
  377.                             MultipleSelections: boolean;                            {        Allow multiple items to be selected?        }
  378.                             useWFont: boolean;                                    {        Display using window's font?            }
  379.                             IconInTitle: boolean;                                    {        Draw icon in the control's title?            }
  380.                             FixedTitle: boolean;                                    {        Is a fixed title displayed in the control?    }
  381.                             bit0: boolean;                                            {           (reserved bit)                            }
  382.                     );                                                            {                                                }
  383.                     1: (                                                        {    • Integer equivalent:                        }
  384.                             Num: integer;                                            {        Specification integer                    }
  385.                     );                                                            {                                                }
  386.             end;                                                            {                                                }
  387.  
  388.  
  389.  
  390.  
  391.  
  392. {==================================== I N I T I A L I Z A T I O N ====================================    }
  393. {Initialize Tools Plus}
  394.     function InitToolsPlus (MoreHandles: integer;                    {Number of MoreMasters initializing cycles        }
  395.                                     MaxWindows: integer;                            {Maximum number of windows required            }
  396.                                     UseColorFlag: boolean                            {Should Color QuickDraw be used if available?    }
  397.                                     ): Boolean;                                        {Was initialization successful?                    }
  398.  
  399.  
  400. {======================================= W I N D O W S ========================================    }
  401. {Open a window and make it current}
  402.     procedure WindowOpen (Window: integer;                        {Window number                                }
  403.                                     left, top, right, bottom: integer;                    {Window's co-ordinates (global)                    }
  404.                                     Title: string;                                        {Window's title (if applicable)                    }
  405.                                     procID: longint;                                    {Window definition ID                            }
  406.                                     goAwayFlag, modalFlag: Boolean);                {Include Close Box?  Is window modal?            }
  407.  
  408. {Open a window and make it current (co-ordinates specified as a 'rect') }
  409.     procedure WindowOpenRect (Window: integer;                    {Window number                                }
  410.                                     Bounds: rect;                                        {Window's co-ordinates (global)                    }
  411.                                     Title: string;                                        {Window's title (if applicable)                    }
  412.                                     procID: longint;                                    {Window definition ID                            }
  413.                                     goAwayFlag, modalFlag: Boolean);                {Include Close Box?  Is window modal?            }
  414.  
  415. {Open the tool bar and make it current}
  416.     procedure ToolBarOpen (Window: integer;                        {Window number                                }
  417.                                     Height: integer;                                    {Tool bar height                                    }
  418.                                     procID: integer);                                    {Appearance/behavior specifications            }
  419.  
  420. {Close a window}
  421.     procedure WindowClose (Window: integer);                        {Window number                                }
  422.  
  423. {Change a window's size}
  424.     procedure WindowSize (Window: integer;                        {Window number                                }
  425.                                     Width, Height: integer;                            {Window's new width and height                    }
  426.                                     Update: boolean);                                {Force doRefresh event for newly exposed rgn?    }
  427.  
  428. {Move a window to the specified co-ordinates}
  429.     procedure WindowMove (Window: integer;                        {Window number                                }
  430.                                     hGlobal: integer;                                    {Horizontal co-ordinates (global)                }
  431.                                     vGlobal: integer;                                    {Vertical co-ordinates (global)                    }
  432.                                     procID: integer);                                    {Behavior specification                            }
  433.  
  434. {Hide or show a window}
  435.     procedure WindowDisplay (Window: integer;                    {Window number                                }
  436.                                     Show: boolean);                                    {Should the window be shown?                    }
  437.  
  438. {Make a specified window the "active" and "current" window}
  439.     procedure ActivateWindow (Window: integer);                    {Window number                                }
  440.  
  441. {Set a window's title}
  442.     procedure WindowTitle (Window: integer;                        {Window number                                }
  443.                                     Title: string);                                    {Window's title (if applicable)                    }
  444.  
  445. {Set the current window's "growing" limits (i.e. maximum/minimum size) }
  446.     procedure SetWindowSizeLimits (minHoriz, minVert, maxHoriz, MaxVert: integer);{Window's size limits in pixels}
  447.  
  448. {Set the current window's standard co-ordinates and user co-ordinates for "zooming"}
  449.     procedure SetWindowZoom (userRect, stdRect: rect);            {User & standard co-ordinates (global)            }
  450.  
  451. {Get the current window's user co-ordinates & standard co-ordinates for "zooming"}
  452.     procedure GetWindowZoom (var userRect, stdRect: Rect);        {User & standard co-ordinates (global)            }
  453.  
  454. {Make a specified window "current", but do not activate it}
  455.     procedure CurrentWindow (Window: integer);                    {Window number                                }
  456.  
  457. {Make the "active" window "current"}
  458.     procedure CurrentWindowReset;
  459.  
  460. {Get a window's status}
  461.     procedure WindowStatus (Window: integer;                        {Window number                                }
  462.                                     var Status: TPWindowStatus);                    {Window's status record                        }
  463.  
  464. {Get the active window number (last used window if Tool Bar and/or Floating Palettes are open)                        }
  465.     function ActiveWindowNumber: integer;                            {Window number of active window                }
  466.  
  467. {Get the current window number}
  468.     function CurrentWindowNumber: integer;                        {Window number of current window                }
  469.  
  470. {Get the front most window number}
  471.     function FirstWindowNumber: integer;                            {Window number of front most window            }
  472.                                                                     {    window is open.                                }
  473. {Get the Tool Bar's window number}
  474.     function ToolBarNumber: integer;                                {Tool Bar's window number                        }
  475.  
  476. {Get the first floating Palette's window number}
  477.     function FirstPaletteNumber: integer;                            {Front most floating Palette's window number    }
  478.  
  479. {Get the first standard window's number (not Tool Bar or Floating Palette).}
  480.     function FirstStdWindowNumber: integer;                        {Front most standard window's number            }
  481.  
  482. {Get the working window number}
  483.     function WorkWindowNumber: integer;                            {Working window number                        }
  484.  
  485. {Get the window number that contains the active editing field}
  486.     function EditFldWindowNumber: integer;                        {Window number containing active editing field    }
  487.  
  488. {Determine if a window is open}
  489.     function WindowIsOpen (Window: integer                        {Window number                                }
  490.                                     ): boolean;                                        {Is the window open?                            }
  491.  
  492. {Determine if a window is visible (open and not hidden)}
  493.     function WindowIsVisible (Window: integer                        {Window number                                }
  494.                                     ): boolean;                                        {Is the window visible?                            }
  495.  
  496. {Determine the type of window}
  497.     function WindowKind (Window: integer                            {Window number                                }
  498.                                     ): integer;                                            {Kind of window                                    }
  499.  
  500. {Get a window's "window pointer" }
  501.     function WindowPointer (Window: integer                        {Window number                                }
  502.                                     ): WindowPtr;                                        {Window's pointer                                }
  503.  
  504.  
  505. {======================================== B U T T O N S ========================================    }
  506. {Create a new button}
  507.     procedure NewButton (Button: integer;                            {Button number                                    }
  508.                                     left, top, right, bottom: integer;                    {Button's co-ordinates (local)                    }
  509.                                     Title: string;                                        {Button's title                                    }
  510.                                     procID: integer;                                    {Button's definition ID                            }
  511.                                     EnabledFlag, SelectedFlag: boolean);                {Enable the button?  Select the button?            }
  512.  
  513. {Create a new button  (co-ordinates specified as a 'rect') }
  514.     procedure NewButtonRect (Button: integer;                        {Button number                                    }
  515.                                     Bounds: rect;                                        {Button's co-ordinates (local)                    }
  516.                                     Title: string;                                        {Button's title                                    }
  517.                                     procID: integer;                                    {Button's definition ID                            }
  518.                                     EnabledFlag, SelectedFlag: boolean);                {Enable the button?  Select the button?            }
  519.  
  520. {Delete a button}
  521.     procedure DeleteButton (Button: integer);                        {Button number                                    }
  522.  
  523. {Enable/disable a button}
  524.     procedure EnableButton (Button: integer;                        {Button number                                    }
  525.                                     EnabledFlag: boolean);                            {Enable the button?                                }
  526.  
  527. {Select/deselect a button}
  528.     procedure SelectButton (Button: integer;                        {Button number                                    }
  529.                                     SelectedFlag: boolean);                            {Select the button?                                }
  530.  
  531. {Determine if a button is enabled}
  532.     function ButtonIsEnabled (Button: integer                        {Button number                                    }
  533.                                     ): boolean;                                        {Is the button enabled?                            }
  534.  
  535. {Determine if a button is selected}
  536.     function ButtonIsSelected (Button: integer                        {Button number                                    }
  537.                                     ): boolean;                                        {Is the button selected?                        }
  538.  
  539. {Set a button's title}
  540.     procedure ButtonTitle (Button: integer;                            {Button number                                    }
  541.                                     Title: string);                                    {Button's title                                    }
  542.  
  543. {Make a button the window's default button}
  544.     procedure SetDefaultButton (Button: integer);                    {Button number                                    }
  545.  
  546. {Remove the "default button status" from the window's default button}
  547.     procedure NoDefaultButton;
  548.  
  549. {"Flash" a push button as though it were pressed by the user}
  550.     procedure FlashButton (Button: integer);                        {Button number                                    }
  551.  
  552.  
  553. {=================================== P I C T U R E   B U T T O N S ==================================    }
  554. {Create a new Picture Button}
  555.     procedure NewPictButton (Button: integer;                        {Picture button number                            }
  556.                                     left, top: integer;                                    {Button's top-left corner in window's local co-ord}
  557.                                     BaseID: integer;                                    {Base image's ID number                        }
  558.                                     procID: longint;                                    {Appearance and Behavior specifications        }
  559.                                     EnabledFlag, SelectedFlag: boolean;                {"Button is enabled"  & "button is selected" flags    }
  560.                                     minimum, value, maximum: integer);                {Minimum, current, and maximum value            }
  561.  
  562. {Delete a picture button}
  563.     procedure DeletePictButton (Button: integer);                    {Picture button number                            }
  564.  
  565. {Enable/disable a picture button}
  566.     procedure EnablePictButton (Button: integer;                    {Picture button number}
  567.                                     EnabledFlag: boolean);                            {Enable the picture button?                        }
  568.  
  569. {Select/deselect a picture button}
  570.     procedure SelectPictButton (Button: integer;                    {Picture button number                            }
  571.                                     SelectedFlag: boolean);                            {Select the picture button?                        }
  572.  
  573. {Get a picture button's minimum setting}
  574.     function GetPictButtonMin (Button: integer                        {Picture button number                            }
  575.                                     ): integer;                                            {Picture button's minimum setting                }
  576.  
  577. {Set a picture button's minimum setting}
  578.     procedure SetPictButtonMin (Button: integer;                    {Picture button number                            }
  579.                                     minimum: integer);                                {Picture button's minimum setting                }
  580.  
  581. {Get a picture button's maximum setting}
  582.     function GetPictButtonMax (Button: integer                        {Picture button number                            }
  583.                                     ): integer;                                            {Picture button's maximum setting                }
  584.  
  585. {Set a picture button's maximum setting}
  586.     procedure SetPictButtonMax (Button: integer;                    {Picture button number                            }
  587.                                     maximum: integer);                                {Picture button's maximum setting                }
  588.  
  589. {Get a picture button's current value}
  590.     function GetPictButtonVal (Button: integer                        {Picture button number                            }
  591.                                     ): integer;                                            {Picture button's current value                    }
  592.  
  593. {Set a picture button's current value}
  594.     procedure SetPictButtonVal (Button: integer;                    {Picture button number                            }
  595.                                     value: integer);                                    {Picture button's value                            }
  596.  
  597. {Set a picture button's current value, and simultaneously select/deselect it}
  598.     procedure SetPictButtonValSelect (Button: integer;            {Picture button number                            }
  599.                                     value: integer;                                    {Picture button's value                            }
  600.                                     SelectedFlag: boolean);                            {Select the picture button?                        }
  601.  
  602. {Set a picture button's value acceleration 'automatic value changing'                                                }
  603.     procedure SetPictButtonAccel (Button: integer;                {Picture button number                            }
  604.                                     Rate: integer);                                    {0 = Linear, 1-3 = Slow to fast acceleration        }
  605.  
  606. {Set a picture button's speed for 'automatic value changing'                                                            }
  607.     procedure SetPictButtonSpeed (Button: integer;                {Picture button number                            }
  608.                                     Rate: integer);                                    {Rate of change (value increment per second)    }
  609.  
  610. {Determine if a picture button is enabled}
  611.     function PictButtonIsEnabled (Button: integer                    {Picture button number                            }
  612.                                     ): boolean;                                        {Is the button enabled?                            }
  613.  
  614. {Determine if a picture button is selected}
  615.     function PictButtonIsSelected (Button: integer                    {Picture button number                            }
  616.                                     ): boolean;                                        {Is the button selected?                        }
  617.  
  618. {"Flash" a picture button as though it were pressed by the user}
  619.     procedure FlashPictButton (Button: integer);                    {Picture button number                            }
  620.  
  621.  
  622. {===================================== S C R O L L   B A R S ======================================    }
  623. {Create a new scroll bar}
  624.     procedure NewScrollBar (ScrollBar: integer;                    {Scroll bar number                                }
  625.                                     left, top, right, bottom: integer;                    {Scroll bar's co-ordinates (local)                }
  626.                                     EnabledFlag: boolean;                            {Enable the scroll bar?                            }
  627.                                     minimum, value, maximum: integer);                {Minimum, current, and maximum value            }
  628.  
  629. {Create a new scroll bar (co-ordinates specified as a 'rect') }
  630.     procedure NewScrollBarRect (ScrollBar: integer;                {Scroll bar number                                }
  631.                                     Bounds: rect;                                        {Scroll bar's co-ordinates (local)                }
  632.                                     EnabledFlag: boolean;                            {Enable the scroll bar?                            }
  633.                                     minimum, value, maximum: integer);                {Minimum, current, and maximum value            }
  634.  
  635. {Delete a scroll bar}
  636.     procedure DeleteScrollBar (ScrollBar: integer);                    {Scroll bar number                                }
  637.  
  638. {Enable/disable a scroll bar}
  639.     procedure EnableScrollBar (ScrollBar: integer;                    {Scroll bar number                                }
  640.                                     EnabledFlag: boolean);                            {Enable the scroll bar?                            }
  641.  
  642. {Get a scroll bar's minimum setting}
  643.     function GetScrollBarMin (ScrollBar: integer                    {Scroll bar number                                }
  644.                                     ): integer;                                            {Scroll bar's minimum setting                    }
  645.  
  646. {Set a scroll bar's minimum setting}
  647.     procedure SetScrollBarMin (ScrollBar: integer;                    {Scroll bar number                                }
  648.                                     minimum: integer);                                {Scroll bar's minimum setting                    }
  649.  
  650. {Get a scroll bar's maximum setting}
  651.     function GetScrollBarMax (ScrollBar: integer                    {Scroll bar number                                }
  652.                                     ): integer;                                            {Scroll bar's maximum setting                    }
  653.  
  654. {Set a scroll bar's maximum setting}
  655.     procedure SetScrollBarMax (ScrollBar: integer;                    {Scroll bar number                                }
  656.                                     maximum: integer);                                {Scroll bar's maximum setting                    }
  657.  
  658. {Get a scroll bar's current value}
  659.     function GetScrollBarVal (ScrollBar: integer                        {Scroll bar number                                }
  660.                                     ): integer;                                            {Scroll bar's current value                        }
  661.  
  662. {Set a scroll bar's current value}
  663.     procedure SetScrollBarVal (ScrollBar: integer;                    {Scroll bar number                                }
  664.                                     value: integer);                                    {Scroll bar's current value                        }
  665.  
  666.  
  667. {==================================== E D I T I N G   F I E L D S ====================================    }
  668. {Allocate heap storage for a Pascal string, and initialize it.}
  669.     function NewStrHandle (StringLen: integer                        {Size of string being allocated (1-255 chars)        }
  670.                                     ): StringHandle;                                    {Handle to allocated string                        }
  671.  
  672. {Create a new field}
  673.     procedure NewField (Field: integer;                                {Field number                                    }
  674.                                     left, top, right, bottom: integer;                    {Field's viewing area co-ordinates (local)        }
  675.                                     hStr: Handle;                                        {Handle to edit field's text                        }
  676.                                     teType: integer;                                    {Type: box around field and/or CR allowed?        }
  677.                                     Just: integer);                                    {Justification: left, center, right                    }
  678.  
  679. {Create a new field (co-ordinates specified as a 'rect') }
  680.     procedure NewFieldRect (Field: integer;                            {Field number                                    }
  681.                                     Bounds: rect;                                        {Field's viewing area co-ordinates (local)        }
  682.                                     hStr: Handle;                                        {Handle to edit field's text                        }
  683.                                     teType: integer;                                    {Type: box around field and/or CR allowed?        }
  684.                                     Just: integer);                                    {Justification: left, center, right                    }
  685.  
  686. {Delete a field}
  687.     procedure DeleteField (Field: integer);                            {Field number                                    }
  688.  
  689. {Activate a  field}
  690.     procedure ActivateField (Field: integer;                            {Field number                                    }
  691.                                     Selection: integer);                                {Text selection: all, start, end                    }
  692.  
  693. {Deactivate the active field}
  694.     procedure DeactivateField;
  695.  
  696. {Process a mouse click in an inactive field.  The click has been detected by the PollSystem procedure.}
  697.     procedure ClickInField;
  698.  
  699. {Get the active field's edited text}
  700.     procedure GetFieldString (var EditString: Str255);                {Field's edited text                                }
  701.  
  702. {Save the active field's edited text in the field's string}
  703.     procedure SaveFieldString;
  704.  
  705. {Determine the active field number}
  706.     function ActiveFieldNumber: integer;                            {Active field number                            }
  707.  
  708. {Determine if a field is empty}
  709.     function FieldIsEmpty (Field: integer                            {Field number                                    }
  710.                                     ): boolean;                                        {Is the specified field empty?                    }
  711.  
  712. {Turn string length limiting on/off for each new field created starting now}
  713.     procedure FieldLengthLimit (Limits: boolean);                    {Should newly created fields be length-limited?    }
  714.  
  715. {Offset a field}
  716.     procedure OffsetField (Field: integer;                            {Field number                                    }
  717.                                     dh, dv: integer);                                    {Number of pixels to be offset (horiz/vert)        }
  718.  
  719. {Paste text into a field}
  720.     procedure PasteIntoField (Field: integer;                        {Field number                                    }
  721.                                     Text: string;                                        {Text which is to be pasted                        }
  722.                                     Replace: boolean);                                {Replace all existing text in field?                }
  723.  
  724.  
  725. {===================================== L I S T   B O X E S  =======================================    }
  726. {Create a new List Box}
  727.     procedure NewListBox (ListBox: integer;                        {List box number                                }
  728.                                     left, top, right, bottom: integer;                    {List box co-ordinates (local)                    }
  729.                                     BoxType: SignedByte);                            {Type of responses to mouse clicks, shift-click,    }
  730.                                                                     {    dragging, etc.                                }
  731.  
  732. {Create a new List Box (co-ordinates specified as a 'rect') }
  733.     procedure NewListBoxRect (ListBox: integer;                    {List box number                                }
  734.                                     Bounds: rect;                                        {List box co-ordinates (local)                    }
  735.                                     BoxType: SignedByte);                            {Type of responses to mouse clicks, shift-click,    }
  736.                                                                     {    dragging, etc.                                }
  737.  
  738. {Delete a List Box}
  739.     procedure DeleteListBox (ListBox: integer);                    {List box number                                }
  740.  
  741. {Set a line of text in a List Box}
  742.     procedure SetListBoxText (ListBox: integer;                    {List box number                                }
  743.                                     LineNum: integer;                                    {Line number                                    }
  744.                                     Text: string);                                    {Text of specified line number                    }
  745.  
  746. {Get a line of text from a List Box}
  747.     procedure GetListBoxText (ListBox: integer;                    {List box number                                }
  748.                                     LineNum: integer;                                    {Line number                                    }
  749.                                     var Text: Str255);                                {Text of specified line number                    }
  750.  
  751. {Get a List Box's line number whose text is greater than or equal to the specified string}
  752.     function SearchListBox (ListBox: integer;                        {List box number                                }
  753.                                     Text: string                                        {Text being compared                            }
  754.                                     ): integer;                                            {Line number of text                            }
  755.  
  756. {Select/deselect a specified List Box line}
  757.     procedure SetListBoxLine (ListBox: integer;                    {List box number                                }
  758.                                     LineNum: integer;                                    {Line number                                    }
  759.                                     setIt: boolean);                                    {Selects the line?                                }
  760.  
  761. {Determine if a specific List Box line is selected}
  762.     function GetListBoxLine (ListBox: integer;                        {List box number                                }
  763.                                     LineNum: integer                                    {Line number                                    }
  764.                                     ): boolean;                                        {Is the line selected?                            }
  765.  
  766. {Get the line number of a selected line in a List Box, starting at LineNum and searching down}
  767.     function GetListBoxLines (ListBox: integer;                        {List box number                                }
  768.                                     LineNum: integer                                    {Line number                                    }
  769.                                     ): integer;                                            {Next selected line                                }
  770.  
  771. {Insert a blank line into a List Box}
  772.     procedure InsertListBoxLine (ListBox: integer;                    {List box number                                }
  773.                                     LineNum: integer);                                {Line number                                    }
  774.  
  775. {Delete a line from a List Box}
  776.     procedure DeleteListBoxLine (ListBox: integer;                    {List box number                                }
  777.                                     LineNum: integer);                                {Line number                                    }
  778.  
  779. {Turn a List Box's text drawing on/off}
  780.     procedure DrawListBox (ListBox: integer;                        {List box number                                }
  781.                                     drawIt: boolean);                                    {Draw the list box's text?                        }
  782.  
  783.  
  784. {========================================= M E N U S ==========================================    }
  785. {Create the "Apple" menu}
  786.     procedure AppleMenu (AboutName: string);                    {Optional "About…" name                        }
  787.  
  788. {Create a menu name, add/change a menu item, or rename an existing menu item (pull-down & hierarchical menus)}
  789.     procedure Menu (MenuNumber: integer;                        {Menu number                                    }
  790.                                     ItemNumber: integer;                                {Item number within the menu                    }
  791.                                     EnabledFlag: boolean;                            {Enable the menu?                                }
  792.                                     MenuText: string);                                {Menu title or item name                            }
  793.  
  794. {Attach a hierarchical menu to a menu item, or detach a hierarchical menu.}
  795.     procedure AttachMenu (MenuNumber: integer;                    {Menu number to which the submenu is attached}
  796.                                     ItemNumber: integer;                                {Item number to which the submenu is attached    }
  797.                                     SubMenuNumber: integer);                        {Hierarchical menu number being attached        }
  798.  
  799. {Insert a menu item}
  800.     procedure InsertMenuitem (MenuNumber: integer;                {Menu number                                    }
  801.                                     ItemNumber: integer;                                {Item number where insertion is to be made        }
  802.                                     EnabledFlag: boolean;                            {Enable the menu?                                }
  803.                                     MenuText: string);                                {Item name                                        }
  804.  
  805. {Remove an entire menu and its associated items, or a menu item}
  806.     procedure RemoveMenu (MenuNumber: integer;                {Menu number                                    }
  807.                                     ItemNumber: integer);                            {Item number within the menu (0=entire menu)    }
  808.  
  809. {Display the menu bar after making changes through the Menu or RemoveMenu procedure}
  810.     procedure UpdateMenuBar;
  811.  
  812. {Get a menu item's text}
  813.     procedure GetMenuString (MenuNumber: integer;                {Menu number                                    }
  814.                                     ItemNumber: integer;                                {Item number within the menu                    }
  815.                                     var MenuText: Str255);                            {Menu item's name                                }
  816.  
  817. {Change the name of a menu item}
  818.     procedure RenameItem (MenuNumber: integer;                    {Menu number                                    }
  819.                                     ItemNumber: integer;                                {Item number within the menu                    }
  820.                                     MenuText: string);                                {Menu item's name                                }
  821.  
  822. {Enable/disable a menu or menu item}
  823.     procedure EnableMenu (MenuNumber: integer;                    {Menu number                                    }
  824.                                     ItemNumber: integer;                                {Item number within the menu (or 0)                }
  825.                                     EnabledFlag: boolean);                            {Enable the menu or item?                        }
  826.  
  827. {Display/remove a menu item's check mark}
  828.     procedure CheckMenu (MenuNumber: integer;                    {Menu number                                    }
  829.                                     ItemNumber: integer;                                {Item number within the menu                    }
  830.                                     checked: boolean);                                {Place check mark beside the menu item?        }
  831.  
  832. {Mark a menu item with a specified character (√ or •, etc)}
  833.     procedure MenuMark (MenuNumber: integer;                    {Menu number                                    }
  834.                                     ItemNumber: integer;                                {Item number within the menu                    }
  835.                                     markChar: char);                                    {Menu item's character                            }
  836.  
  837. {Get a menu item's ‘mark’ character (√ or •, etc) which is optionally displayed at the item's left side}
  838.     procedure GetMenuMark (MenuNumber: integer;                {Menu number                                    }
  839.                                     ItemNumber: integer;                                {Item number within the menu                    }
  840.                                     var markChar: char);                                {Menu item's character                            }
  841.  
  842. {Specify a keyboard equivalent for a menu item}
  843.     procedure MenuCmd (MenuNumber: integer;                    {Menu number                                    }
  844.                                     ItemNumber: integer;                                {Item number within the menu                    }
  845.                                     cmdChar: char);                                    {Menu item's keyboard-equivalent character    }
  846.  
  847. {Get a keyboard equivalent for a menu item}
  848.     procedure GetMenuCmd (MenuNumber: integer;                {Menu number                                    }
  849.                                     ItemNumber: integer;                                {Item number within the menu                    }
  850.                                     var cmdChar: char);                                {Menu item's keyboard-equivalent character    }
  851.  
  852. {Specify an icon to be displayed by a menu item}
  853.     procedure MenuIcon (MenuNumber: integer;                    {Menu number                                    }
  854.                                     ItemNumber: integer;                                {Item number within the menu                    }
  855.                                     IconSelector: integer);                            {IconSelector + 256 = cicn or ICON ID            }
  856.  
  857. {Get the specifier for the icon that is displayed by a menu item}
  858.     procedure GetMenuIcon (MenuNumber: integer;                {Menu number                                    }
  859.                                     ItemNumber: integer;                                {Item number within the menu                    }
  860.                                     var IconSelector: integer);                        {IconSelector + 256 = cicn or ICON ID            }
  861.  
  862. {Set the character style for a menu item}
  863.     procedure MenuStyle (MenuNumber: integer;                    {Menu number                                    }
  864.                                     ItemNumber: integer;                                {Item number within the menu                    }
  865.                                     theStyle: Style);                                    {Menu item's character style                    }
  866.  
  867. {Determine the number of items in a menu}
  868.     function MenuItemCount (MenuNumber: integer                    {Menu number                                    }
  869.                                     ): integer;                                            {Number of items in the menu                    }
  870.  
  871. {Determine a menu's parent menu number}
  872.     procedure GetParentMenu (var MenuNumber: integer;            {Parent menu's menu number                    }
  873.                                     var ItemNumber: integer;                            {Parent menu's item number                     }
  874.                                     SubMenuNumber: integer);                        {Menu number whose parent menu is determined}
  875.  
  876. {Determine a menu item's submenu number}
  877.     procedure GetSubMenu (MenuNumber: integer;                    {Menu number                                    }
  878.                                     ItemNumber: integer;                                {Item number within the menu                    }
  879.                                     var SubMenuNumber: integer);                    {Menu number of this item's submenu            }
  880.  
  881. {Highlight a menu in the menu bar, or turn off menu bar highlights}
  882.     procedure MenuHilite (MenuNumber: integer);                    {Menu num for a pull-down menu (1-15, 0=none)    }
  883.  
  884.  
  885. {==================================== P O P - U P   M E N U S =====================================    }
  886. {Create a new Pop-Up menu}
  887.     procedure NewPopUp (MenuNumber: integer;                    {Pop-Up Menu number                            }
  888.                                     left, top, right, bottom: integer;                    {Enclosing rectangle co-ordinates (local)        }
  889.                                     MenuTitle: string;                                {Title                                            }
  890.                                     procID: integer;                                    {Appearance & Behavior specifications            }
  891.                                     EnabledFlag: boolean);                            {"Menu is enabled" flag                            }
  892.  
  893. {Create a new Pop-Up menu (co-ordinates specified as a 'rect') }
  894.     procedure NewPopUpRect (MenuNumber: integer;                {Pop-Up Menu number                            }
  895.                                     Bounds: rect;                                        {Enclosing rectangle co-ordinates (local)        }
  896.                                     Title: string;                                        {Title                                            }
  897.                                     procID: integer;                                    {Appearance & Behavior specifications            }
  898.                                     EnabledFlag: boolean);                            {"Menu is enabled"  flag                            }
  899.  
  900. {Add or change a Pop-Up menu item, or rename an existing menu item}
  901.     procedure PopUpMenu (MenuNumber: integer;                    {Pop-Up Menu number                            }
  902.                                     ItemNumber: integer;                                {Item number within the menu                    }
  903.                                     EnabledFlag: boolean;                            {Enable the menu?                                }
  904.                                     MenuText: string);                                {Item name                                        }
  905.  
  906. {Insert a Pop-Up menu item}
  907.     procedure InsertPopUpItem (MenuNumber: integer;                {Pop-Up Menu number                            }
  908.                                     ItemNumber: integer;                                {Item number where insertion is to be made        }
  909.                                     EnabledFlag: boolean;                            {Is menu item enabled?                            }
  910.                                     MenuText: string);                                {Item name                                        }
  911.  
  912. {Remove an Pop-Up menu, or a Pop-Up menu item}
  913.     procedure RemovePopUp (MenuNumber: integer;                {Pop-Up Menu number                            }
  914.                                     ItemNumber: integer);                            {Item number within the menu (0=entire menu)    }
  915.  
  916. {Get an Pop-Up Menu item's text}
  917.     procedure GetPopUpString (MenuNumber: integer;                {Pop-Up Menu number                            }
  918.                                     ItemNumber: integer;                                {Item number within the menu                    }
  919.                                     var MenuText: str255);                            {Menu item's name                                }
  920.  
  921. {Change the name of a Pop-Up Menu item}
  922.     procedure RenamePopUp (MenuNumber: integer;                {Pop-Up Menu number                            }
  923.                                     ItemNumber: integer;                                {Item number within the menu                    }
  924.                                     MenuText: string);                                {Menu item's name                                }
  925.  
  926. {Enable/disable a Pop-Up Menu or menu item}
  927.     procedure EnablePopUp (MenuNumber: integer;                {Pop-Up Menu number                            }
  928.                                     ItemNumber: integer;                                {Item number within the menu (or 0)                }
  929.                                     EnabledFlag: boolean);                            {Enable the menu or item?                        }
  930.  
  931. {Determine if a Pop-Up Menu is enabled}
  932.     function PopUpIsEnabled (MenuNumber: integer                {Pop-Up Menu number                            }
  933.                                     ): boolean;                                        {Is the menu enabled?                            }
  934.  
  935. {Display/remove a Pop-Up Menu item's check mark}
  936.     procedure CheckPopUp (MenuNumber: integer;                    {Pop-Up Menu number                            }
  937.                                     ItemNumber: integer;                                {Item number within the menu                    }
  938.                                     checked: boolean);                                {Place check mark beside the menu item?        }
  939.  
  940. {Mark a Pop-Up Menu item with a specified character (√ or •, etc)}
  941.     procedure PopUpMark (MenuNumber: integer;                    {Pop-Up Menu number                            }
  942.                                     ItemNumber: integer;                                {Item number within the menu                    }
  943.                                     markChar: char);                                    {Menu item's character                            }
  944.  
  945. {Get a Pop-Up Menu item's ‘mark’ character (√ or •, etc) which is optionally displayed at the item's left side}
  946.     procedure GetPopUpMark (MenuNumber: integer;                {Pop-Up Menu number                            }
  947.                                     ItemNumber: integer;                                {Item number within the menu                    }
  948.                                     var markChar: char);                                {Menu item's character                            }
  949.  
  950. {Specify an icon to be displayed by a Pop-Up Menu item}
  951.     procedure PopUpIcon (MenuNumber: integer;                    {Pop-Up Menu number                            }
  952.                                     ItemNumber: integer;                                {Item number within the menu                    }
  953.                                     IconSelector: integer);                            {IconSelector + 256 = cicn or ICON ID            }
  954.  
  955. {Get the specifier for the icon that is displayed by a Pop-Up Menu item}
  956.     procedure GetPopUpIcon (MenuNumber: integer;                {Pop-Up Menu number                            }
  957.                                     ItemNumber: integer;                                {Item number within the menu                    }
  958.                                     var IconSelector: integer);                        {IconSelector + 256 = cicn or ICON ID            }
  959.  
  960. {Set the character style for a Pop-Up Menu item}
  961.     procedure PopUpStyle (MenuNumber: integer;                    {Pop-Up Menu number                            }
  962.                                     ItemNumber: integer;                                {Item number within the menu                    }
  963.                                     theStyle: Style);                                    {Menu item's character style                    }
  964.  
  965. {Determine the number of items in a Pop-Up Menu}
  966.     function PopUpItemCount (MenuNumber: integer                {Pop-Up Menu number                            }
  967.                                     ): integer;                                            {Number of items in the menu                    }
  968.  
  969. {Determine the selected item in a Pop-Up Menu}
  970.     function GetPopUpSelection (MenuNumber: integer                {Pop-Up Menu number                            }
  971.                                     ): integer;                                            {Selected item in the menu                        }
  972.  
  973.  
  974. {======================================= C U R S O R S  ========================================    }
  975. {Change the cursor shape}
  976.     procedure CursorShape (CursorType: integer);                    {Cursor type                                    }
  977.  
  978. {Reset the cursor to its appropriate shape depending on its location in the active window.}
  979.     procedure ResetCursor;
  980.  
  981. {Create a new Cursor Table}
  982.     procedure NewCursorTable (CursorTable: integer;                {Cursor table number                            }
  983.                                     CursorType: integer);                                {Cursor type                                    }
  984.  
  985. {Delete a Cursor Table}
  986.     procedure DeleteCursorTable (CursorTable: integer);            {Cursor table number                            }
  987.  
  988. {Add a new Cursor Zone to a Cursor Table, or replace an existing Cursor Zone}
  989.     procedure CursorZone (CursorTable: integer;                    {Cursor table number                            }
  990.                                     CursorZone: integer;                                {Cursor zone number                            }
  991.                                     CursorType: integer;                                {Cursor type                                    }
  992.                                     left, top, right, bottom: integer);                    {Cursor zone's co-ordinates (local)                }
  993.  
  994. {Add a new Cursor Zone to a Cursor Table, or replace an existing Cursor Zone (co-ordinates specified as a 'rect') }
  995.     procedure CursorZoneRect (CursorTable: integer;                {Cursor table number                            }
  996.                                     CursorZone: integer;                                {Cursor zone number                            }
  997.                                     CursorType: integer;                                {Cursor type                                    }
  998.                                     ZoneRect: rect);                                    {Cursor zone's co-ordinates (local)                }
  999.  
  1000. {Add a new Cursor Zone to a Cursor Table, or replace an existing Cursor Zone (co-ordinates specified as a 'region') }
  1001.     procedure CursorZoneRgn (CursorTable: integer;                {Cursor table number                            }
  1002.                                     CursorZone: integer;                                {Cursor zone number                            }
  1003.                                     CursorType: integer;                                {Cursor type                                    }
  1004.                                     ZoneRgn: RgnHandle);                            {Cursor zone's region (local)                    }
  1005.  
  1006. {Indicate that the cursor shape may have to be recalculated due to manually altering Cursor Zone regions.}
  1007.     procedure ChangedCursorZone;
  1008.  
  1009. {Delete a Cursor Zone}
  1010.     procedure DeleteCursorZone (CursorTable: integer;                {Cursor table number                            }
  1011.                                     CursorZone: integer);                                {Cursor zone number                            }
  1012.  
  1013. {Get the bounding rectangle of a specified Cursor Zone}
  1014.     procedure GetCursorZone (CursorTable: integer;                {Cursor table number                            }
  1015.                                     CursorZone: integer;                                {Cursor zone number                            }
  1016.                                     var ZoneRect: rect);                                {Cursor zone's bounding rectangle                }
  1017.  
  1018. {Get a handle to a specified Cursor Zone's region}
  1019.     function GetCursorZoneRgn (CursorTable: integer;                {Cursor table number                            }
  1020.                                     CursorZone: integer                                {Cursor zone number                            }
  1021.                                     ): RgnHandle;                                        {Handle to Cursor zone's region                    }
  1022.  
  1023. {Make the current window use a specified Cursor Table}
  1024.     procedure UseCursorTable (CursorTable: integer);                {Cursor table number                            }
  1025.  
  1026. {Find the cursor zone that contains a specified point}
  1027.     function FindCursorZone (thePoint: point                        {Location in window's local co-ordinates            }
  1028.                                     ): integer;                                            {Cursor zone number containing the point        }
  1029.  
  1030. {Enable/disable clicks on push-buttons when the watchCursor is displayed}
  1031.     procedure WatchCursorButtons (Allowed: boolean);            {Can push-buttons be clicked when the            }
  1032.                                                                     {    watchCursor is displayed?                    }
  1033.  
  1034.  
  1035. {======================================== P O L L I N G =========================================    }
  1036. {Tools Plus polling procedure}
  1037.     function PollSystem (var UserPoll: TPPollRecord                {Polling record                                    }
  1038.                                     ): boolean;                                        {Did an event occurred?                        }
  1039.  
  1040. {Set the number of ticks (1/60 sec) your application can wait until it receives a doNothing event.}
  1041.     procedure SetNullTime (ForegroundTime: longint;                {Duration when application is active                }
  1042.                                     BackgroundTime: longint);                        {Duration when application is suspended        }
  1043.  
  1044. {Determine if "waiting for doNothing events" (timed doNothing events) is supported.}
  1045.     function WaitAvail: boolean;                                    {Is waiting between doNothing events supported?}
  1046.  
  1047. {Determine if your application is 'suspended' (i.e. this is not the active application)}
  1048.     function ApplicationSuspended: boolean;                        {Is your application suspended?                }
  1049.  
  1050. {Clear the mouse's current click or drag (i.e. discontinue the process, clear the event}
  1051.     procedure ResetMouseClicks;
  1052.  
  1053.  
  1054. {==================================== C O L O R   D R A W I N G ===================================    }
  1055. {Determine if the Macintosh has Color QuickDraw}
  1056.     function HasColorQuickDraw: boolean;                            {Does the Mac have Color QuickDraw?            }
  1057.  
  1058. {Determine the number of logical screens (distinct screen depth and color/gray settings)}
  1059.     function NumberOfScreens: integer;                            {Number of logical screens available            }
  1060.  
  1061. {Begin updating the specified logical screen}
  1062.     procedure BeginUpdateScreen (TheScreen: integer);            {Logical screen number                            }
  1063.  
  1064. {End updating the most recent logical screen}
  1065.     procedure EndUpdateScreen;
  1066.  
  1067. {Determine the logical screen's depth}
  1068.     function ScreenDepth: integer;                                    {Screen depth in bits                            }
  1069.  
  1070. {Determine if the logical screen is set to display in color    }
  1071.     function ScreenHasColors: boolean;                            {Is the screen set to display in color?            }
  1072.  
  1073. {Color equivalent to 'PenNormal' routine}
  1074.     procedure PenColorNormal;
  1075.  
  1076. {Color equivalent to 'GetPenState' routine}
  1077.     procedure GetColorPenState (var ThePenState: ColorPenState);
  1078.  
  1079. {Color equivalent to 'SetPenState' routine}
  1080.     procedure SetColorPenState (ThePenState: ColorPenState);
  1081.  
  1082.  
  1083. {================================= U S E R    N O T I F I C A T I O N =================================    }
  1084. {Define the settings for the Notification Manager.}
  1085.     procedure SetNotification (IconID: integer;                        {'SICN' icon ID displayed during notification        }
  1086.                                     SoundID: integer;                                    {Sound ID that is played at notification            }
  1087.                                     Message: string;                                {Message displayed during notification            }
  1088.                                     ResetAfterUse: boolean);                            {Revert settings to defaults after notification?    }
  1089.  
  1090. {If this application is inactive, inform user that this application needs attention.}
  1091.     function PostNotification: boolean;                                {Was the user notified?                            }
  1092.  
  1093.  
  1094. {==================================== M I S C E L L A N E O U S ===================================    }
  1095. {Determine the System file version}
  1096.     function SystemVersion: extended;                                {System file version (eg: 7.0.1 returned as 7.01)}
  1097.  
  1098. {Draw an icon (ICON, ICN#, icl8, icl4, and cicn)}
  1099.     procedure DrawIcon (theIcon: integer;                            {Icon ID number                                }
  1100.                                     left, top: integer;                                    {Icon's top-left corner in window's local co-ord.    }
  1101.                                     EnabledFlag, SelectedFlag: boolean);                {Enable the icon?  Select the icon?                }
  1102.  
  1103. {Specify the default appearance for disabled icons}
  1104.     procedure DefaultIconLook (IconSpec: integer);                {Appearance specifications                        }
  1105.  
  1106. {Draw a standard Macintosh progress thermometer}
  1107.     procedure DrawThermometer (DisplayRect: rect;                {Thermometer's co-ordinates (local)                }
  1108.                                     Percent: real);                                    {Percent complete (i.e. .5 means 50%)            }
  1109.  
  1110. {Display a dynamic Alert Box and return the use's action}
  1111.     function AlertBox (theIcon: integer;                                {Icon ID number                                }
  1112.                                     AlertText: string;                                {Alert's text                                        }
  1113.                                     AlertCode: longint                                {Button setup codes                            }
  1114.                                     ): integer;                                            {Button clicked by user                            }
  1115.  
  1116. {Change a button name for the next use of the dynamic Alert Box}
  1117.     procedure AlertButtonName (Button: integer;                    {Button number from 1 to 9                        }
  1118.                                     Title: string);                                    {Button's title                                    }
  1119.  
  1120. {Draw "zoom" lines (expanding/collapsing rectangle)}
  1121.     procedure ZoomLines (OldRect: Rect;                            {Starting rectangle (global co-ordinates)        }
  1122.                                     NewRect: Rect;                                    {Ending rectangle (global co-ordinates)            }
  1123.                                     Zoom: integer);                                    {Zoom across, in, or out                            }
  1124.  
  1125. {Play the System Error sound}
  1126.     procedure Beep;
  1127.  
  1128. {Wait for a specified duration}
  1129.     procedure Wait (ClockTicks: longint);                            {Number of ticks (1/60th sec) to wait            }
  1130.  
  1131. {Determine the minimum value of 2 numbers}
  1132.     function min (Val1, Val2: longint): longint;
  1133.  
  1134. {Determine the maximum value of 2 numbers}
  1135.     function max (Val1, Val2: longint): longint;
  1136.  
  1137.  
  1138.  
  1139.  
  1140.  
  1141. {PRIVATE:    This function obtains the System file's version number as an integer for the SystemVersion function.    }
  1142.     function _SYSV: integer;
  1143.  
  1144.  
  1145.  
  1146. implementation
  1147.  
  1148. {The SystemVersion function returns the System File's version as an 'extended' type floating-point number.  This    }
  1149. {source code, when compiled, will produce an appropriate 'extended' type floating-point number whose format is        }
  1150. {determined by your compiler's settings (ie: Compiled for a math co-processor, 68040, or not)                        }
  1151.     function SystemVersion;
  1152.     begin
  1153.         SystemVersion := _SYSV / 100;                                {Get System Version and convert to an            }
  1154.     end;                                                                {    extended type.                                }
  1155.  
  1156. end.